<?php
namespace app\app\controller\v1;
use think\Db;
use app\app\util\OnlineUtils;
class ImgController extends  BaseController{

    /**
     * @return array
     * 生成分销的海报
     */
    public function CreateCollagePoster(){
        $user_id = OnlineUtils::getUserIdBySid();
        $pathId = input('post.pathId');
        $line_cover = Db::name('line')->field('cover')->find($pathId);
//        header("Content-type:image/png");
        //这个是图片的文件地址
        $bg1 = 'https://ctd.douxiangzhuan.com/static/bg.png';  
		//背景图片
        $bg2 = $this->getwxcollagecode($user_id,$pathId);     //小程序码
	    $bg3 = $line_cover['cover'];
        //这个是我刚刚的背景图
        $config = array(
            'text'=>array(
                array(
                    'text'=>'',
                    'left'=>0,
                    'top'=>0,
//                    'fontPath'=>'./SIMHEI.TTF',        //字体文件
                    'fontSize'=>1,                     //字号
                    'fontColor'=>'125,125,125',        //字体颜色
                    'angle'=>0,
                ),
            ),
            'image'=>array(
                array(
                    'url'=>$bg2,       //图片资源路径
                    'left'=>240,
                    'top'=>425,
                    'stream'=>0,             //图片资源是否是字符串图像流
                    'right'=>0,
                    'bottom'=>0,
                    'width'=>120,
                    'height'=>120,
                    'opacity'=>100
                ),
                array(
                    'url'=>$bg3,       //图片资源路径
                    'left'=>10,
                    'top'=>10,
                    'stream'=>0,             //图片资源是否是字符串图像流
                    'right'=>0,
                    'bottom'=>0,
                    'width'=>379,
                    'height'=>380,
                    'opacity'=>100,
				
                ),

            ),
            'background'=>$bg1,
        );
        $res = $this->createPoster($config,'./static/collageposter/'.$user_id.'.png');
        return json_code(200,'success',['img'=>config('COLLAGEPOSTER').$user_id.'.png']);
    }

    /**
     * @param $user_id
     * @return
     * 小程序二维码
     */
    public function getwxcollagecode($user_id,$pathId)
    {
        $access_token = $this->AccessToken();
        $url   = 'https://api.weixin.qq.com/wxa/getwxacode?access_token='.$access_token;
        $path  = "pages/path/path?user_id=".$user_id."?pathId=".$pathId;
        $width = 280;
//        $data  = '{"path":"'.$path.'","width":'.$width.'}';
        $data  = array(
            'path'=>$path,
            'width'=>$width
        );
        $return= $this->request_post($url,json_encode($data));
        //将生成的小程序码存入相应文件夹下
        $name = time();
        file_put_contents(ROOT_PATH.'public'.DS.'/static/code/'.$name.'.jpg',$return);
        return config('CODE').$name.'.jpg';

    }


    /**
     * @return array
     * 生成我的海报
     */
    public function create(){
        $user_id = OnlineUtils::getUserIdBySid();
        // header("Content-type:image/png");
        //这个是图片的文件地址
        $bg1 = 'https://ctd.douxiangzhuan.com/static/bg.jpg';
        $bg2 = $this->getwxaqrcode($user_id);
        //这个是我刚刚的背景图
        $config = array(
            'text'=>array(
                array(
                    'text'=>'',
                    'left'=>0,
                    'top'=>0,
//                    'fontPath'=>'./SIMHEI.TTF',        //字体文件
                    'fontSize'=>1,                     //字号
                    'fontColor'=>'125,125,125',        //字体颜色
                    'angle'=>0,
                ),
            ),
            'image'=>array(
                array(
                    'url'=>$bg2,       //图片资源路径
                    'left'=>188,
                    'top'=>359,
                    'stream'=>0,             //图片资源是否是字符串图像流
                    'right'=>0,
                    'bottom'=>0,
                    'width'=>100,
                    'height'=>100,
                    'opacity'=>100
                ),

            ),
            'background'=>$bg1,
        );
        $res = $this->createPoster($config,'./static/poster/'.$user_id.'.jpeg');
        return json_code(200,'success',['img'=>config('POSTER').$user_id.'.jpeg']);
    }


    /**
     * @param $user_id
     * @return
     * 小程序二维码
     */
    public function getwxaqrcode($user_id)
    {
        $access_token = $this->AccessToken();
        $url   = 'https://api.weixin.qq.com/wxa/getwxacode?access_token='.$access_token;
        $path  = "pages/index/index?user_id=".$user_id;
        $width = 280;
//        $data  = '{"path":"'.$path.'","width":'.$width.'}';
        $data  = array(
            'path'=>$path,
            'width'=>$width
        );
        $return= $this->request_post($url,json_encode($data));
        //将生成的小程序码存入相应文件夹下

        $name = time();
        file_put_contents(ROOT_PATH.'public'.DS.'/static/code/'.$name.'.jpg',$return);
        return config('CODE').$name.'.jpg';

    }


    /**
     * @return bool|mixed
     *  AccessToken
     */
    public function AccessToken()
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.config('APPID').'&secret='.config('SECRET');
        $AccessToken = $this->request_post($url);
        $AccessToken = json_decode($AccessToken , true);
        $AccessToken = $AccessToken['access_token'];
        return $AccessToken;
    }

    /**
     * @param $url
     * @param array $data
     * @return bool|mixed
     */
    public function request_post($url, $data=array()){
        $ch = curl_init();
        $header = array("Accept-Charset"=>"utf-8");
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $tmpInfo = curl_exec($ch);
        if (curl_errno($ch)) {
            return false;
        }else{
            return $tmpInfo;
        }
    }

    /**
     * @param array $config
     * @param string $filename
     * @return bool|string
     */
    public function createPoster($config=array(),$filename=""){
        //如果要看报什么错，可以先注释调这个header
        if(empty($filename)) header("content-type: image/png");
        $imageDefault = array(
            'left'=>0,
            'top'=>0,
            'right'=>0,
            'bottom'=>0,
            'width'=>100,
            'height'=>100,
            'opacity'=>100
        );
        $textDefault = array(
            'text'=>'',
            'left'=>0,
            'top'=>0,
            'fontSize'=>32, //字号
            'fontColor'=>'255,255,255', //字体颜色
            'angle'=>0,
        );
        $background = $config['background'];//海报最底层得背景
        //背景方法
        $backgroundInfo = getimagesize($background);
        $backgroundFun = 'imagecreatefrom'.image_type_to_extension($backgroundInfo[2], false);
        $background = $backgroundFun($background);
        $backgroundWidth = imagesx($background); //背景宽度
        $backgroundHeight = imagesy($background); //背景高度
        $imageRes = imageCreatetruecolor($backgroundWidth,$backgroundHeight);

        $color = imagecolorallocate($imageRes, 0, 0, 0);
        imagefill($imageRes, 0, 0, $color);

        imagecopyresampled($imageRes,$background,0,0,0,0,imagesx($background),imagesy($background),imagesx($background),imagesy($background));

        //处理了图片
        if(!empty($config['image'])){
            foreach ($config['image'] as $key => $val) {
                $val = array_merge($imageDefault,$val);
                $info = getimagesize($val['url']);
                $function = 'imagecreatefrom'.image_type_to_extension($info[2], false);
                if($val['stream']){ //如果传的是字符串图像流
                    $info = getimagesizefromstring($val['url']);
                    $function = 'imagecreatefromstring';
                }
                $res = $function($val['url']);
                $resWidth = $info[0];
                $resHeight = $info[1];

                //建立画板 ，缩放图片至指定尺寸
                $canvas=imagecreatetruecolor($val['width'], $val['height']);
                imagefill($canvas, 0, 0, $color);

                //关键函数，参数（目标资源，源，目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h）
                imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val['width'], $val['height'],$resWidth,$resHeight);
                $val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']) - $val['width']:$val['left'];
                $val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']) - $val['height']:$val['top'];

                //放置图像
                imagecopymerge($imageRes,$canvas, $val['left'],$val['top'],$val['right'],$val['bottom'],$val['width'],$val['height'],$val['opacity']);//左，上，右，下，宽度，高度，透明度
            }
        }

        //处理文字
//        if(!empty($config['text'])){
//
//            foreach ($config['text'] as $key => $val) {
//                $val = array_merge($textDefault,$val);
//                list($R,$G,$B) = explode(',', $val['fontColor']);
//                $fontColor = imagecolorallocate($imageRes, $R, $G, $B);
//
//                if($val['left']){
//                    //可调节左右的方法
//                    $val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']):$val['left'];
//                }else{
//                    //文字水平居中实质
//                    $fontBox = imagettfbbox($val['fontSize'],$val['angle'],$val['fontPath'],$val['text']);
//                    $val['left'] = ceil(($backgroundWidth - $fontBox[2]) / 2);
//                }
//
//                $val['top'] = $val['top']<0 ?$backgroundHeight- abs($val['top']) : $val['top'];
//
//                imagettftext($imageRes,$val['fontSize'],$val['angle'],$val['left'],$val['top'],$fontColor,$val['fontPath'],$val['text']);
//            }
//        }

        //生成图片
        if(!empty($filename)){
            $res = imagejpeg ($imageRes,$filename,90); //保存到本地
            imagedestroy($imageRes);
            if(!$res) return false;
            return $filename;
        }else{
            imagejpeg ($imageRes); //在浏览器上显示
            imagedestroy($imageRes);
        }
    }


}